Spring Boot 集成 resteasy篇 — jax-rs初步介绍和spring boot集成
JAX-RS 是代表restful web service的一套规范API,JAX-RS规范基于JAVA编程语言,它是用来创建Restful 风格的web services服务的。Jax-rs使用一系列注解来简化java开发。
JAX-RS也称jsr339 (全称java specifications requests java规范提案第339个),由jcp(java community process)组织经过投票通过。
为了加深对jsr的理解,举一个简单的例子,jsr 330标准就是依赖注入的提案,已经通过。
规范说明
规范定义了一些常见的注解(见下表),用来标注一种资源文件为restfun风格的资源文件
序号 | 注解 | 描述 |
---|---|---|
1 | @Path | 类或者方法的相对地址,标注在类或者方法上 |
2 | @GET | HTTP GET请求用,用来获取资源 |
3 | @PUT | HTTP PUT 请求,用来创建资源 |
4 | @POST | HTTP POST 请求, 用来创建或者更新资源 |
5 | @DELETE | HTTP DELETE请求, 用来删除资源 |
6 | @HEAD | HTTP HEAD请求, 用来获取一个接口是否可用的状态 |
7 | @Produces | 返回数据的格式比如APPLICATION/XML, TEXT/HTML, APPLICATION/JSON |
8 | @Consumes | 请求数据格式 , 如json |
9 | @PathParam | 绑定url里面的参数 |
10 | @QueryParam | 绑定url后面的参数(?后面的) |
11 | @MatrixParam | 绑定包含多个 property (属性)=value(值) 方法参数表达式 |
12 | @HeaderParam | 给header里面传参 |
13 | @CookieParam | 给cookie里面传参 |
14 | @FormParam | 给form传参 |
15 | @DefaultValue | 给参数一个默认值 |
16 | @Context | 可以注入HttpRequest,HttpResponse用 |
规范实现
下文将以resteasy为例
包引入
|
|
resteasy使用ServletContainerInitializer
接口来初始化项目,如果要开启启动扫描,扫描providers和resources。还需要引入另外一个包。
|
|
跟spring集成,还需要spring的包
|
|
还有一些解析json之类的包
|
|
resteasy根据servlet容器的不同,还有些不同,这里讲的是spring boot继承,不过多赘述,详细见这里 , 尽管引了这些包,项目也没有和spring boot集成起来,因为项目不能autoconfigure,还有servlet也没有配置的地方。
这里我提供一个思路,实现 BeanFactoryPostProcessor接口 ,在postProcessBeanFactory 去创建servlet
Spring Boot集成
另外我提供一种比较简单的方法,直接使用开源集成,这里使用的是paypal开源的一个集成方案。
引入包
123456<dependency><groupId>com.paypal.springboot</groupId><artifactId>resteasy-spring-boot-starter</artifactId><version>2.3.0-RELEASE</version></dependency><!--PS,上面的那一堆包不用引了,这个就帮我们引入了-->引入spring boot的一堆包
用法
指定servletMapping路径
写一个类继承Application,然后交给spring管理
12345"/v1/")(public class ApplicationPathImpl extends Application {}
编写restful接口啦
123456789101112131415161718"province/")(public class ExternalFacadeImpl implements ExternalFacade {/*** http://localhost:8080/v1/province/city/1* @param id* @return*/"city/{id}")(public Result<Boolean> getCity(@PathParam("id") Long id) {return new Result<>();}}
下一篇将介绍常用注解作用